package com.mori.design.pattern.singleton;

/**
 * 单例：静态内部类式
 * @author mori
 */
public class SingletonStaticInnerClass {

    private SingletonStaticInnerClass() {
    }

    /**
     * 外部类初始化的时候不会初始化内部类，只有当调用getInstance方法的时候才会初始化内部类
     *	1、使用内部类，规避了 JVM 加载外部类的时候就单例进行初始化
     * 	2、在外部类被调用的时候内部类才会被加载（类的懒加载）
     * 	3、内部类必须在getInstance方法调用之前初始化（对象的懒加载）
     * 	4、由 static 对外部的可见性
     * 	5、final 保证了 INSTANCE 不被重写
     */
    private static class SingletonHolder {
        private static final SingletonStaticInnerClass INSTANCE = new SingletonStaticInnerClass();
    }

    public static SingletonStaticInnerClass getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
